﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Resources;
using EnvDTE80;
using MVCScaffold.GeradoresDeCodigo;
using MVCScaffold.GerenciadoresContexto;
using MVCScaffold.Suporte;

namespace MVCScaffold.UI
{
    public partial class UserControlFinalizar : UserControl
    {
        public UserControlFinalizar()
        {
            InitializeComponent();
            IniciarForm();
        }

        private void IniciarForm()
        {
            labelEntidadesSelecionadas.Text = String.Empty;
            labelStatusGeracaoView.Text = String.Empty;
            labelStatusGeracaoController.Text = String.Empty;
            labelStatusSolution.Text = String.Empty;
            labelResultadoFinal.Text = String.Empty;
        }

        public void GerarCodigo(GerenciadorContexto gerenciadorContexto, GerenciadorArquivoProjeto gerenciadorArquivoProjeto, DTE2 applicationObject)
        {
            GeradorBase gerenciadorTemplates = null;

            try
            {
                labelResultadoFinal.Text = "Processando...";
                if (gerenciadorContexto == null || gerenciadorArquivoProjeto == null)
                {
                    MessageBox.Show(Suporte.Mensagens.GetInstance().ResourceManager.GetString("EDMXNaoEncontrado"), "ASP.NET MVC Scaffold", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }

                gerenciadorTemplates = new GeradorCSharp(gerenciadorContexto, gerenciadorArquivoProjeto, applicationObject);
                gerenciadorTemplates.StatusEvent += new GeradorBase.StatusEventHandler(gerenciadorTemplates_StatusEvent);
                gerenciadorTemplates.Executar();
                labelResultadoFinal.Text = Suporte.Mensagens.GetInstance().ResourceManager.GetString("MensagemSucesso");
                labelResultadoFinal.ForeColor = Color.Black;
            }
            catch (Exception ex)
            {
                labelResultadoFinal.Text = ex.Message;
                labelResultadoFinal.ForeColor = Color.Red;
            }
        }

        protected void gerenciadorTemplates_StatusEvent(object sender, StatusEventArgs e)
        {
            Color color = Color.Black;
            if (e.MensagemErro == null)
                color = Color.Black;
            else if (e.MensagemErro.Value)
                color = Color.Red;
            else if (!e.MensagemErro.Value)
                color = Color.Green;

            if (e.TipoStatus == MVCScaffold.Suporte.TipoStatus.Views)
            {
                labelStatusGeracaoView.Text = e.Mensagem;
                labelStatusGeracaoView.ForeColor = color;
            }
            else if (e.TipoStatus == MVCScaffold.Suporte.TipoStatus.Controllers)
            {
                labelStatusGeracaoController.Text = e.Mensagem;
                labelStatusGeracaoController.ForeColor = color;
            }
            else if (e.TipoStatus == MVCScaffold.Suporte.TipoStatus.Solution)
            {
                labelStatusSolution.Text = e.Mensagem;
                labelStatusSolution.ForeColor = color;
            }

            Application.DoEvents();
        }

        public void MontarTela(GerenciadorContexto gerenciadorContexto, GerenciadorArquivoProjeto gerenciadorArquivoProjeto)
        {
            labelEntidadesSelecionadas.Text = String.Format(Suporte.Mensagens.GetInstance().ResourceManager.GetString("LabelEntidadesSelecionadas"), gerenciadorContexto.Entidades.Count(x => x.IsSelected));
        }
    }
}
